package base_util

import (
	"context"
	"errors"
	"github.com/gin-gonic/gin"
	"github.com/redis/go-redis/v9"
	"go-likaladi-shop/common/base_global"
	"go.uber.org/zap"
)

func GetRedisValue(key string, ctx *gin.Context) (string, bool) {
	value, err := base_global.RdbCluster.Get(context.Background(), key).Result()

	if errors.Is(err, redis.Nil) {
		// key 不存在或已过期
		return "", true
	}

	if isRedisHandelError(key, err, ctx) {
		return "", false
	}

	return value, true
}

func GetRedisValueForExpire(key, expireError string, ctx *gin.Context) (string, bool) {
	value, err := base_global.RdbCluster.Get(context.Background(), key).Result()

	if errors.Is(err, redis.Nil) {
		// key 不存在或已过期
		RespError(expireError, ctx)
		return "", false
	}

	if isRedisHandelError(key, err, ctx) {
		return "", false
	}

	return value, true
}

func isRedisHandelError(key string, err error, ctx *gin.Context) bool {
	if err != nil {
		// 其他错误（网络、超时、redis挂了）
		zap.S().Errorw("获取redis值异常", "key", key, "err", err.Error())
		RespError("获取redis值异常", ctx)
		return true
	}
	return false
}
